﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace TimerService
{
    public partial class Service1 : ServiceBase
    {
        System.Timers.Timer timer1;  //计时器

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            #region Method1
            //timer1 = new System.Timers.Timer();
            //timer1.Interval = 3000;  //设置计时器事件间隔执行时间
            //timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
            //timer1.Enabled = true; 
            #endregion

            #region Method2
            //EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述
            ////writestr("服务启动");//自定义文本日志
            //System.Timers.Timer t = new System.Timers.Timer();
            //t.Interval = 1000;
            //t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件； 
            //t.AutoReset = true;//设置是执行一次（false）还是一直执行(true)； 
            //t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件；  
            #endregion
            #region Method3
            timer1 = new System.Timers.Timer();
            timer1.Interval = 8000; //设置计时器事件间隔执行时间
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(TMStart1_Elapsed);
            timer1.Enabled = true; 
            #endregion

        }

        protected override void OnStop()
        {
            #region Method1
            //this.timer1.Enabled = false; 
            #endregion
            #region Method2
            //writestr("服务停止");
            //EventLog.WriteEntry("我的服务停止"); 
            #endregion
            #region Method3
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");
            }
            this.timer1.Enabled = false; 
            #endregion

        }
        #region Method3
        protected override void OnPause()
        {
            //服务暂停执行代码
            base.OnPause();
        }
        protected override void OnContinue()
        {
            //服务恢复执行代码
            base.OnContinue();
        }
        protected override void OnShutdown()
        {
            //系统即将关闭执行代码
            base.OnShutdown();
        }
        private void TMStart1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //执行SQL语句或其他操作
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 1 + "log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
            }
        }

        #endregion
        #region Method2
        ///// <summary>
        ///// 定时检查，并执行方法
        ///// </summary>
        ///// <param name="source"></param>
        ///// <param name="e"></param>
        //public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)
        //{
        //    int intHour = e.SignalTime.Hour;
        //    int intMinute = e.SignalTime.Minute;
        //    int intSecond = e.SignalTime.Second;

        //    if (intHour == 13 && intMinute == 30 && intSecond == 00) ///定时设置,判断分时秒
        //    {
        //        try
        //        {
        //            System.Timers.Timer tt = (System.Timers.Timer)source;
        //            tt.Enabled = false;
        //            SetInnPoint();
        //            tt.Enabled = true;
        //        }
        //        catch (Exception err)
        //        {
        //            writestr(err.Message);
        //        }
        //    }
        //}
        ////我的方法
        //public void SetInnPoint()
        //{
        //    try
        //    {
        //        writestr("服务运行");
        //        //这里执行你的东西
        //        Thread.Sleep(10000);
        //    }
        //    catch (Exception err)
        //    {
        //        writestr(err.Message);
        //    }
        //}

        /////在指定时间过后执行指定的表达式
        /////
        /////事件之间经过的时间（以毫秒为单位）
        /////要执行的表达式
        //public static void SetTimeout(double interval, Action action)
        //{
        //    System.Timers.Timer timer = new System.Timers.Timer(interval);
        //    timer.Elapsed += delegate (object sender, System.Timers.ElapsedEventArgs e)
        //    {
        //        timer.Enabled = false;
        //        action();
        //    };
        //    timer.Enabled = true;
        //}
        //public void writestr(string readme)
        //{
        //    //debug==================================================
        //    //StreamWriter dout = new StreamWriter(@"c:\" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt");
        //    StreamWriter dout = new StreamWriter(@"c:\" + "WServ_InnPointLog.txt", true);
        //    dout.Write("\r\n事件：" + readme + "\r\n操作时间：" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
        //    //debug==================================================
        //    dout.Close();
        //} 
        #endregion
        #region Method1
        //private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        //{
        //    //执行SQL语句或其他操作
        //} 
        #endregion
    }
}
